package util

import (
	"encoding/json"
	"fmt"
)

// RespMsg 统一返回对象
type RespMsg struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data"`
}

// JSONToBytes 结构体转换为 json 格式的二进制数组
func (resp *RespMsg) JSONToBytes() []byte {
	bytes, err := json.Marshal(resp)
	if err != nil {
		fmt.Printf("Failed to json marshal, err: %s", err.Error())
	}

	return bytes
}

// JSONToByString 结构体转换为 json 格式的 string
func (resp *RespMsg) JSONToByString() string {
	return string(resp.JSONToBytes())
}

// NewRespMsg 生成 response 对象
func NewRespMsg(code int, msg string, data interface{}) *RespMsg {
	return &RespMsg{code, msg, data}
}

// GenSimpleRespStream 只包含 code 和 message 的响应体（[]byte）
func GenSimpleRespStream(code int, msg string) []byte {
	return []byte(fmt.Sprintf(`{"code": %d, "msg": "%s"}`, code, msg))
}

// GenSimpleRespString 只包含 code 和 message 的响应体（string）
func GenSimpleRespString(code int, msg string) string {
	return fmt.Sprintf(`{"code": %d, "msg": "%s"}`, code, msg)
}
